M5Stack −LCDとWi-Fi付きの小型マイコン− と開発環境M5Cloudをためしてみる #m5stack
はじめに
M5Stackを買ってみました。M5Stackとは、液晶ディスプレイとWi-Fi+Bluetoothを搭載したマイコンモジュールです。5.5cmの正方形の小さな筐体に、MCU, 液晶、Wi-Fi、加速度センサ、スピーカ、バッテリが搭載されています。さらに別売りのGPSやLORA, 各種センサやキーボードなどを積み重ねる(=stack)ように接続して拡張が可能という、楽しそうなキットです。
以下公式サイトです。
Webを見ると、いろいろなモジュールが提供されていて、いろいろと想像が膨らみます。ブレッドボードと接続するためのケーブルや、ユニバーサル基板のプロトタイピングボードも提供されているので、電子工作にも活用できます。
ゲーム機や携帯電話のようなケースも提供されています。(ゲームに関しては、いろいろと面白いことができるようです。お好きな方はぜひ調べてみてくださいw)
m5stack core development kit
買ってみたのはm5stack core development kitです。そのほかproto packageも購入してみました。
購入先は、公式ストア(aliexpress)です。上記公式サイトからリンクがあります。(aliexpressとは、中国アリババの海外向け通販サイトです)
ところで、海外通販で気になるのは、無線の工事認証ですが、ちゃんと日本の認証(TELEC)を取得してあるようです。〒マークの入ったシールが貼られています。
上面には液晶のほか、ボタンが三つ。
側面に、Groveコネクタ、電源ボタン、USB-C端子、そしてmicroSDのスロットが配置されています。そして、四辺のすべてに外部に信号を引き出すためのピンとソケットが用意されています。シールで信号の名前も明記されています。ここに別のモジュールを接続したり、ジャンパーケーブルを使ってブレッドボードと繋いだりすることができます。
裏ふたを開けてみたところです。BOTTOMと書かれた基板とメインの基板がピンヘッダで接続されています。中央の信号名が書かれたシールのあるところにMCUがあります。モジュールではなく、基板に直接MCUが実装され、シールドケースで覆われています。その上にシールが貼られています。液晶は見えませんが、右側のメイン基板の裏側にあります。左側BOTTOMと書かれた基板の裏側にはバッテリが搭載されています。小型なのであまり容量はなさそうです。
別のモジュールを使用して拡張する場合には、BOTTOMと書かれた基板を取り外して、ピンヘッダで接続されます。同じサイズのモジュールの場合には積み重ねていくことになります。このピンヘッダはMBUSと名前を付けて規格化しているようです。もちろん自分の作った回路を接続することも可能です。
電源投入
添付のUSB-Cケーブルを接続して電源を入れてみます。起動音がしてロゴが表示されます。
上記画面のあと、ワイヤーフレームグラフィックや、ボタンのテストなどが動作します。
バッテリが搭載されているので、ケーブルレスでも動作します。しかし容量が小さいので、長時間は使えないようです。
電源オフ
ちなみに電源オフは、側面の電源ボタンを2回押します。
開発環境
さて、m5stackのコアは、Esprressifという中国のベンダーによるESP32というMicrocontrollerが使われています。
m5stackの開発環境ですが、選択肢が3種類あります。
- esp-idf
- Arduino
- m5cloud
esp-idf
ベンダーが提供するツールチェーンやSDKを使っての開発が可能です。言語は基本的にCです。ちゃんとexampleもあります。ただしm5stack専用というわけではありませんので、ピンアサインなどすこし修正が必要になります。
Arduino
言わずと知れたArduinoです。m5stackの場合、これによるサポートが一番整っているようです。ArduinoのBoard ManagerやLibrary Managerで、簡単に開発環境を整えることが可能です。exampleもいろいろあります。工場出荷時のファームウェアは、ArduinoのサンプルFactoryTestのようです。
m5cloud
これはベータ版なのですが、クラウドベースの開発環境が提供されています。
ブラウザで使えるIDEが提供されており、Wi-Fi経由でアップロードすることで実機でコードを走らせることができます。使える言語は、micropythonです。そのほかに、Luaも使えるようです。
今回はm5cloudを試してみることにします。
準備
m5cloudを使うための手順は下記githubのREADME.mdに案内があります。
https://github.com/m5stack/M5Cloud
ファームウェアを書き込む
まずはファームウェアを書き換える必要があります。シリアル経由でファームウェアを書き換えるのですが、まずはUSBシリアルドライバをインストールする必要があります。公式サイトのGetting Startedに手順が説明されています。
http://www.m5stack.com/assets/docs/index.html
USBシリアルチップは、Sillicon LaboratoryのCP2104という電子工作的には普通に使われているものです。しかし、macOSには含まれていませんので、別途インストールが必要です。下記サイトからインストーラをダウンロードしてきて、インストールします。
https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
インストールが成功していれば、デバイス(m5stack)とUSB-Cで接続したときに、PC(macOS)側にttyデバイスが見えるはずです。
$ ls /dev/tty.* /dev/tty.SLAB_USBtoUART
念のためですが、通信ができるかどうかも確認しておきます(screenを使います)。シリアルのbpsは115200です。電源ボタンを押すとリセットされ、ブートシーケンスが見えれば正常です。切断はCtrl-A Ctrl-Kです。
$ screen /dev/tty.SLAB_USBtoUART 115200 ets Jun 8 2016 00:22:57 rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)configsip: 0, SPIWP:0xee
続いてファームウェアです。まずは書き込み用ツールesptoolを用意します。pipで入れられるようです。Arduinoの環境をセットアップ’してある場合は、そちらを使うこともできるようです。
ファームウェアを(githubから)ダウンロード。
https://github.com/m5stack/M5Cloud/tree/master/firmwares
$ pip install esptool $ curl -L -O https://github.com/m5stack/M5Cloud/raw/master/firmwares/m5cloud-20180206-v0.3.3.bin
書き込みをおこないます。サイズが1Mを超えているので、少し時間がかかります。
$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART erase_flash $ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART write_flash --flash_mode dio -z 0x1000 m5cloud-20180206-v0.3.3.bin
ファームウェアには、psramと付いたバリエーションがありますが、基本的に無印のものを使えばOKです。
Wi-Fiをセットアップする
ファームウェアを書き込んで起動すると、m5stackがWi-FiのAPとなります。液晶画面に、SSIDやIPアドレスが表示されます。
設定のため、PCもしくはスマホのWi-Fi接続先を、一時的にm5stackに変更します。
そして、ブラウザから、http://192.168.4.1 を開くと、セットアップ画面が現れます。設定するのは、SSIDとパスワードのみです。
環境に合わせて適切に設定し、Configureボタンを押します。そうすると、液晶画面には6桁のパスコードとURLが表示されます。
m5cloud
アカウントを登録する
画面に表示されたURLにPCからアクセスすると、ログイン/登録画面となります。(画面ではio.m5stack.comとなっていますが、ネットの公式情報では、cloud.m5stack.comとなっていました)
メールアドレスとパスワードを登録、そしてログインします。
デバイスを登録する
ログインしたら、まずはデバイスを登録します。
connectingがonlineになれば成功です。
プロジェクトを開く
左のIDEアイコンをクリックします。
登録済みのデバイスがプルダウンで選べますので、どのデバイスを使うのかを選択します。
ファイルの同期が行われ、成功すると、小さなサンプルコードが表示された状態となります。
実際に動かす
サンプルをアップロード
初期状態で表示されているコメントアウトされているコードは動きそうなので、コメントを外して動かしてみます。
コードを修正したら左下のUpload & Runアイコンをクリックします。
クラウドにコードがアップロードされ、それがWi-Fi経由でm5stackにダウンロードされるようです。ダウンロード完了すると、自動的に再起動します。
お約束のhello world!が表示されました。無事動いているようです!ケーブル経由でアップロードするのではなく、ネットワークからコードをダウンロードして動いていることに、ちょっと感動です!
ちょっと改造してみる
APIがREADME.mdに載っていました。描画の関数が用意されているようですので、少し試してみます。
https://github.com/m5stack/M5Cloud/blob/master/README.md
画像を中央に描画してみます。コードを1行追加します。
そしてアップロードアイコンをクリックしてjpgファイルを追加します。
成功しました!
実は、jpg画像の描画はなかなか成功しませんでした。jpgファイルのフォーマットに制約があるようで、macOSのPreviewで生成したjpgは表示できず、変換が必要でした。こちらの情報を参考にさせていただきました。
まとめ
小型マイコンモジュールm5stackを試してみました。クラウド型開発環境が提供されているなど、なかなかがんばっている感じです。https化されていないとか、まだまだ荒削りな印象ですが、目立ったトラブルもなくちゃんと動作させることができました。
正直、クラウド開発環境で可能なことはまだまだ限られてくると思われますが、センサーを読み取って、クラウドに上げる程度のことは十分可能に見えます。micropythonで気軽に書いて、ワイヤレスでアップロードして、すぐ試せるのは面白い環境だと感じました。
昨年、MFSZに参加したときに、m5stackも展示されていました。とても人気があって、その場の特価販売はすぐに品切れていました。TELECも取る予定と聞いていたのですが、ちゃんとOKになりました。国内でもスイッチサイエンスさんで販売予定とのことです。
こちらからは以上です。
(2/28) スイッチサイエンスさんでの販売が始まったようです
https://www.switch-science.com/catalog/3647/
参考
- m5stack公式サイト http://www.m5stack.com/
- 公式ストア(aliexpress) https://www.aliexpress.com/store/3226069
- セットアップガイド http://www.m5stack.com/assets/docs/index.html
- Sillicon Laboratory VCPドライバ https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
- m5cloud http://cloud.m5stack.com/
- m5cloudガイド https://github.com/m5stack/M5Cloud/